/****************************************************************
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.     *
 *                                                              *
 * Copyright (C) 2009, Jun Li All rights reserved.              *
 * More about Jun{                                              *
 * Homepage: http://www.jpxx.org/                               *
 * Email   : lijun@jpxx.org                                     *
 * }                                                            *
 * SOFTWARE ENGINEERING COLLEGE OF SICHUAN UNIVERSITY           *
 *                                                              *
 ****************************************************************/
package org.jpxx.sec.core.service;

import java.util.List;

import org.jpxx.sec.common.util.PageList;
import org.jpxx.sec.core.model.AdminDO;
import org.jpxx.sec.core.model.FirstMenuDO;
import org.jpxx.sec.core.model.SecondMenuDO;

/**
 * <p>
 * 底层数据操作接口。底层所有数据的访问都由此接口处理！
 * </p>
 * 
 * @author Jun Li lijun@jpxx.org (http://www.jpxx.org)
 * @version 1.0.0 $ org.jpxx.ssw.core.service.DataAccessFacade.java $, $Date:
 *          2009-5-2 $
 * 
 */
public interface DataAccessFacade {

	/**
	 * 根据用户主键获取Admin对象
	 * 
	 * @return 返回Admin对象
	 */
	public AdminDO getAdminByID(int id);

	/**
	 * 根据登录名获取Admin对象
	 * 
	 * @param name
	 *            用户名
	 * @return 返回Admin对象
	 */
	public AdminDO getAdminByName(String name);

	/**
	 * 分页显示管理员。
	 * 
	 * @param pageSize
	 *            每页显示的数量
	 * @param pageNum
	 *            从第几页开始
	 * @return PageList
	 */
	public PageList getAdminPageList(int pageSize, int pageNum);

	/**
	 * 添加管理员
	 * 
	 * @param admin
	 *            管理员Core层对象
	 * @return 添加成功返回true
	 */
	public boolean addAdmin(AdminDO admin);

	/**
	 * 修改该管理员信息
	 * 
	 * @param admin
	 * @return 修改成功返回true
	 */
	public boolean editAdmin(AdminDO admin);

	/**
	 * 根据管理员id删除管理员。
	 * 
	 * @param id
	 *            管理员id
	 * @return 删除成功返回true
	 */
	public boolean deleteAdminByID(int id);

	/**
	 * 根据管理员名称锁定管理员
	 * 
	 * @param name
	 *            管理员名称
	 * @return
	 */
	public boolean lockAdminByName(String name);

	/**
	 * 根据管理员名称解锁
	 * 
	 * @param name
	 *            管理员名称
	 * @return
	 */
	public boolean unlockAdminByName(String name);

	/**
	 * 设置指定用户的验证码
	 * 
	 * @param name
	 *            用户名
	 * @param code
	 *            验证码
	 * @return
	 */
	public boolean setAuthCode(String name, String code);

	/**
	 * 设置安全邮箱
	 * 
	 * @param name
	 *            用户名
	 * @param email
	 *            安全邮箱
	 * @return
	 */
	public boolean setEmail(String name, String email);

	/**
	 * 获取一级菜单列表。
	 * 
	 * @return 一级菜单
	 */
	public List<FirstMenuDO> getFirstMenu();

	/**
	 * 根据一级菜单id读取其二级菜单。
	 * 
	 * @param firstMenuID 一级菜单id
	 * @return 二级菜单
	 */
	public List<SecondMenuDO> getSecondMenu(int firstMenuID);
}
